
# 设置工程工作目录、调试环境PATH等
MACRO(SETUP_VS_DEBUGGER_PARAMS PRODUCT_NAME SOLUTION_FOLDER_NAME)
	# 设置工程所属文件夹，设置工作目录
	SET_PROPERTY(TARGET ${PRODUCT_NAME} PROPERTY FOLDER ${SOLUTION_FOLDER_NAME})
	SET_TARGET_PROPERTIES(${PRODUCT_NAME} PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/..")
	
	# 设置工程调试环境变量PATH目录(最终影响项目属性-配置属性-调试-环境)，这样不会影响系统的环境变量PATH，只对当前项目起作用(VS_DEBUGGER_ENVIRONMENT需要CMake最低3.13)
	SET(DLL_PATH "PATH=%PATH%" "${OSG_DIR}/bin;${3rd_BIN_DIR}")
	SET(DLL_PATH ${DLL_PATH} "${OSGEARTH_DIR}/bin")
	# SET(DLL_PATH ${DLL_PATH} "${OSGQT_DIR}/bin")
	SET(DLL_PATH ${DLL_PATH} "${_qt5Widgets_install_prefix}/bin")
	#MESSAGE(${_qt5Widgets_install_prefix})
	SET_TARGET_PROPERTIES(${PRODUCT_NAME} PROPERTIES VS_DEBUGGER_ENVIRONMENT "${DLL_PATH}")
ENDMACRO(SETUP_VS_DEBUGGER_PARAMS)

# 设置当前目录名称作为工程名
MACRO(SETUP_PROJECT)
	STRING( REGEX REPLACE ".*/(.*)" "\\1" PRODUCT_NAME ${CMAKE_CURRENT_SOURCE_DIR} )
ENDMACRO(SETUP_PROJECT)

#一个功能一个DLL。注意宏定义中一个参数如果是一个字符数组的话（例如PRODUCT_FILES），在调用宏的时候要用双引号""
MACRO(SETUP_FUNCTION PRODUCT_NAME SOLUTION_FOLDER_NAME PRODUCT_FILES)
	#导出标志，在Export.h中用到
	ADD_DEFINITIONS(-DEXPORT_LIBRARY)
	#生成动态库
	ADD_LIBRARY(${PRODUCT_NAME} SHARED ${PRODUCT_FILES})
	#设置链接库、输出目录、安装目录等
	SETUP_LINK_OUTPUT_INSTALL(${PRODUCT_NAME} ${SOLUTION_FOLDER_NAME})
ENDMACRO(SETUP_FUNCTION)
#需要安装数据文件。注意宏定义中一个参数如果是一个字符数组的话（例如PRODUCT_FILES，PRODUCT_DATA_FILES），在调用宏的时候要用双引号""
MACRO(SETUP_FUNCTION_WITH_DATA PRODUCT_NAME SOLUTION_FOLDER_NAME PRODUCT_FILES PRODUCT_DATA_FILES)
	#导出标志，在Export.h中用到
	ADD_DEFINITIONS(-DEXPORT_LIBRARY)
	#生成动态库
	ADD_LIBRARY(${PRODUCT_NAME} SHARED ${PRODUCT_FILES})
	#设置链接库、输出目录、安装目录等
	SETUP_LINK_OUTPUT_INSTALL_WITH_DATA(${PRODUCT_NAME} ${SOLUTION_FOLDER_NAME} ${PRODUCT_DATA_FILES})
ENDMACRO(SETUP_FUNCTION_WITH_DATA)

# http://stackoverflow.com/questions/7787823/cmake-how-to-get-the-name-of-all-subdirectories-of-a-directory
#列出一个目录下的子文件夹
MACRO(SUBDIRLIST result curdir)
  FILE(GLOB children RELATIVE ${curdir} ${curdir}/*)
  SET(dirlist "")
  FOREACH(child ${children})
    IF(IS_DIRECTORY ${curdir}/${child})
        LIST(APPEND dirlist ${child})
    ENDIF()
  ENDFOREACH()
  SET(${result} ${dirlist})
ENDMACRO()

#获取当前目录下的源文件
MACRO(GET_PRODUCT_FILES)
	FILE(GLOB PRODUCT_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.cpp" "*.h")
	#MESSAGE("PRODUCT_FILES:" ${PRODUCT_FILES})
ENDMACRO()